package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.kq.service.gov.model.dto.RoomDataPackageDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.TimeRoomInfoDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.TimeRoomInfoResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.examiner.RoomExaminerDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.GceRoomData;
import com.hyt.it.ogt.kq.service.gov.model.entity.ObtRoomData;
import com.hyt.it.ogt.kq.service.gov.model.entity.TimeRoom;
import com.hyt.it.ogt.kq.service.gov.model.param.PageRoomPackageParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.*;
import com.hyt.it.ogt.kq.service.gov.model.vo.roomdata.UnArrangeRoomTimeInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 批次考场表 Mapper 接口
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface TimeRoomMapper extends BaseMapper<TimeRoom> {

    /**
     * 删除数据
     * @param timeRoomIdList
     * @return
     */
    int deleteTimeRoomById(@Param("timeRoomIdList") List<String> timeRoomIdList);

    /**
     * 获取考务包信息
     * @param taskCode 考试任务编号
     * @param roomCode 考场编号
     * @return 考务包信息
     */
    List<RoomDataPackageDTO> getRoomDataPackageDTOList(String taskCode, String roomCode);

    /**
     * 获取模拟测试考务包信息
     * @param taskCode 考试任务编号
     * @param roomCode 考场编号
     * @return 模拟测试考务包信息
     */
    List<RoomDataPackageDTO> getMockRoomDataPackageDTOList(String taskCode, String roomCode);

    /**
     * 获取场次信息返回结果
     * @param taskCode 考试任务编号
     * @param placeCode 考点编号
     * @return 场次信息返回结果
     */
    List<TimeRoomInfoResultDTO> getTimeRoomInfoResultDTO(String taskCode, String placeCode);

    /**
     * 根据考试任务编号、场次编号获取场次信息
     * @param taskCode 考试任务编号
     * @param timeRoomCode 场次编号
     * @return 场次信息
     */
    TimeRoom getByTaskTimeRoomCode(String taskCode, String timeRoomCode);

    /**
     * 获取场次信息
     * @param taskId
     * @return
     */
    List<ObtRoomData> getRooDataList(String taskId);

    /**
     * 获取GCE考试系统场次信息用于生成考务包
     * @param taskId 考试任务id
     * @return GCE考试系统场次信息用于生成考务包
     */
    List<GceRoomData> getGceRoomDataList(String taskId);

    /**
     * 获取
     * @param param
     * @return
     */
    Page<RoomPackageVO> getPageRoomPackage(PageRoomPackageParam param);


    /**
     * 查询还有未编排数据的考点代码
     * @param taskId
     * @return
     */
    List<TaskPlaceVO> selectNoArrangePlaceIds(String taskId);

    /**
     * 查询场次信息--根据考点代码
     * @param taskId
     * @param placeId
     * @return
     */
    List<TimeRoomVO> selectTimeRoomByPlaceId(String taskId, String placeId);

    /**
     * 查询未编排考生场次
     * @param taskId
     * @return
     */
    List<UnArrangeRoomTimeInfoVO> selectUnArrangeTimeRoomInfo(String taskId);

    /**
     * 根据批次id查询考场信息
     *
     * @param taskId
     * @param timeId
     * @return
     */
    List<OfficeRoomVO> getRoomListByTimeId(String taskId, String timeId);

    /**
     * 根据批次id获取批次下的考场数据
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @return 批次下的考场数据
     */
    List<RoomExaminerDTO> getRoomExaminerDTO(String taskId, String timeId);

    /**
     * 根据考试任务编号、批次编号、考场编号，获取场次信息
     * @param taskCode 考试任务编号
     * @param timeCode 批次编号
     * @param roomCode 考场编号
     * @return 场次信息
     */
    TimeRoom getByTimeRoomCode(String taskCode, String timeCode, String roomCode);

    /**
     * 根据考试任务id、批次id获取场次信息
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @return 场次信息
     */
    List<TimeRoom> getByTaskIdAndTimeId(String taskId, String timeId);

    /**
     * 获取场次信息DTO
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @param roomIds 考场id，多个用英文逗号分隔
     * @return 场次信息DTO
     */
    List<TimeRoomInfoDTO> listTimeRoomInfoDTO(String taskId, String timeId, String roomIds);

    /**
     * 获取考场信息
     * @param examId
     * @return
     */
    List<TimeRoomCodeVO> selectTimeRoomCodes(String examId);

    int countRoomNum(String taskId, String timeId);
}
